#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
#include <cctype>
#include <sstream>
#include<string>
using namespace std;
string changesmall(string a){
	for(int i=0;i<a.size();i++){
		if(a[i]>='A'&&a[i]<='Z')a[i]=char(a[i]+32);
	}
	return a;
};//转小写
struct title{
	string old;//原标题
	string small;//转换为小写后的标题
	int num;//引用次数
	int key;//原先位置
};
bool cmp(title a,title b){
	if(a.num!=b.num)return a.num>b.num;
	return a.key<b.key;
}

bool judge(string a,string b){
	stringstream ss;
	ss<<b;
	string str1[300];
	string str2[300];
	string str;
	int n=0;
	int m=0;
	while(ss>>str) {//先将询问一个个单词地读入数组
		str1[n]=str;
		n++;
	}
	ss.clear();
	ss<<a;//再将标题读入
	while(ss>>str) {
		str2[m]=str;
		m++;
	}
	int key=0;
	for(int i=0; i<n; i++) { //外层是询问
		for(int j=0; j<m; j++) {//内层是标题
			if(str1[i]==str2[j]) {
				key++;
				break;
			}
		}
	}
	if(key==n)return 1;
	return 0;
}



int main(){
	int n;//论文数目
	while(cin>>n&&n!=0){
		getchar();
		title t[n];//存储论文标题信息
		for(int i=0;i<n;i++){
			getline(cin,t[i].old);
			t[i].small =changesmall(t[i].old);
			t[i].key =i;
			cin>>t[i].num ;
			getchar();
		}
		sort(t,t+n,cmp);
		int m;//询问数目
		cin>>m;
		getchar();
		string temp;//当前的询问
		for(int i=0;i<m;i++){
			getline(cin,temp);
			for(int j=0; j<n; j++) { //在存储标题的结构体数组中查找
				//这里要判断子串
				if(judge(t[j].small,temp)) {
					cout<<t[j].old<<endl;
				}
			}
			 cout<<"***"<<endl;
		}
		cout<<"---"<<endl;
		}
	return 0;
}